\documentclass{article}
\usepackage{ctex}
\usepackage{geometry}
\usepackage{ragged2e}
\usepackage{graphicx}
\usepackage{enumerate}
\usepackage{listings}
\usepackage{xcolor}
\lstset{
  basicstyle=\ttfamily\small,    % 等宽字体
  numbers=left,                   % 显示行号
  numberstyle=\tiny\color{gray},  % 行号样式
  frame=single,                   % 边框样式
  breaklines=true,                % 自动换行
  keywordstyle=\color{blue},      % 关键字颜色
  commentstyle=\color{green!40!black}, % 注释颜色
  stringstyle=\color{red}         % 字符串颜色
}
\geometry{a4paper,scale=0.7}
\title{任务调度、LCD汉字与蜂鸣器实验报告}
\author{赵俊宇 PB24061271}
\date{\today}

\begin{document}
\maketitle
\tableofcontents
\section{优化任务调度的鲁棒性}
在参考代码中,如果某个任务时间过于长,会出现runtask[i].ticks会小于零并不会执行的问题.
\begin{lstlisting}[language=C]
    if(runtask[i].ticks==0) 
    { //到达此任务的执行（时间片耗尽）
        runtask[i].ticks=ticks[i]; //恢复此任务的时间片
        runtask[i].ftask(); 
    } //执行相应的任务
\end{lstlisting}

只需要改变判断条件,即能避免此问题,即:
\begin{lstlisting}[language=C]
    if (runtask[i].ticks<=0)
    {
        runtask[i].ticks=ticks[i];
        runtask[i].ftask();
    }
\end{lstlisting}

这样,在时间片耗尽甚至计数为负时,仍可以继续执行任务.

\section{LCD汉字显示问题}
由于只有八个地址可以使用,尴尬的存储成为了限制.

不过,我们可以参考分时复用的思想,实现一种``软件字库''.方法在于利用人眼的视觉暂留特性,将更多汉字存储在MCU内,
构建一个循环反复显示汉字,从而使得在视觉上出现多个汉字.

\section{蜂鸣器演奏乐谱的方法}
首先,我们需要设计好乐谱和每个音符:
\begin{lstlisting}[language=C]
    unsigned letter[13] = {0,   // 休止符
		262,  // C4(Do)
		300,  // D4(Re)
		330,  // E4(Mi)
		349,  // F4(Fa)
		392,  // G4(So)
		440,  // A4(La)
		494,  // B4(Ti)
		523,  // C5(Do高八度)
		587,  // D5(Re高八度)
		659,  // E5(Mi高八度)
		698,  // F5(Fa高八度)
	800}; // G5(So高八度)

	// 生日快乐歌音符序列
	unsigned char music[25] = {2,2,3,2,5,4,  // 祝你生日快乐
		2,2,3,2,6,5,  // 祝你生日快乐
		2,2,9,7,5,4,3, // 祝你生日快乐
	10,10,9,7,6,5}; // 祝你生日快乐
\end{lstlisting}

在准备好乐曲后,我们在主函数中使用循环方式演奏乐谱,通过改变计数器,实现不同音调.
主函数如下:
\begin{lstlisting}[language=C]
    while(music[i]){
			freq=letter[music[i]];
			if (freq>0)
			{
				ICR1 =F_CPU/2/8/freq;
				OCR1A=ICR1/2;
			}
			i++;
			_delay_ms(250);
		}
		_delay_ms(1000);
\end{lstlisting}
这样,就能实现最基础的蜂鸣器演奏.
\end{document}